package com.kj.tms.system.service.menu.serviceImpl;


import com.kj.tms.common.bean.dto.TreeData;
import com.kj.tms.common.bean.exception.BusinessException;
import com.kj.tms.common.bean.service.BaseService;
import com.kj.tms.common.bean.session.SessionManager;
import com.kj.tms.common.utils.constant.Consts;
import com.kj.tms.pri.system.menu.dto.CommonModuleDto;
import com.kj.tms.pri.system.menu.dto.ModuleDto;
import com.kj.tms.pri.system.menu.service.CommonModuleService;
import com.kj.tms.pri.system.menu.service.ModuleService;
import com.kj.tms.pri.system.user.dto.UserDto;
import com.kj.tms.system.service.menu.dao.CommonModuleMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author: wangguoqing
 * @Description: 人员常用功能业务实现类
 * @Date: Created in 15:03 2017/10/30
 * @Company: 北京宏图天安
 * @Version: 2017/10/30
 * @Modified By:
 */
@RestController
public class CommonModuleServiceImpl  extends BaseService<CommonModuleDto> implements CommonModuleService {

    private static final Logger logger = LoggerFactory.getLogger(CommonModuleServiceImpl.class);
    @Autowired
    private CommonModuleMapper commonModuleMapper;

    @Autowired
    private ModuleService moduleServiceImpl;

    @Autowired
    private SessionManager sessionManager;

    public CommonModuleMapper getMapper() {
        return commonModuleMapper;
    }


    /**
     * 获取模块树加载数据
     * @return
     * @see [类、类#方法、类#成员]
     */
    public List<TreeData> getCurrentMenu(){
        try{
            //获取所有的菜单模块
            UserDto user = (UserDto) sessionManager.getAttribute(Consts.USER);
            List<ModuleDto> datalist = user.getModuleDtos();

            // 获取人员ID及机构id获取已添加到重用菜单的功能
            CommonModuleDto commonModuleDto = new CommonModuleDto();
            commonModuleDto.setUserId(user.getUserId());
            commonModuleDto.setOrgCode(user.getCurUserOrgCode());

            //获取全部的常用功能信息
            List<CommonModuleDto> datalist_commonModule = getMapper().queryByList(commonModuleDto);

            //返回的结果集
            List<TreeData> results = new ArrayList<TreeData>();

            //根节点
            TreeData td = new TreeData();
            td.setName("用户功能菜单树");
            td.setpId("-1");
            td.setCode("0");
            td.setAction_url("0");
            td.setId("0");
            td.setTitle(td.getName());

            if (datalist_commonModule.size() > 0) {
                td.setChecked(true);
            }
            results.add(td);
            //设置已分配模块的状态
            for (ModuleDto dto : datalist) {
                td = moduleServiceImpl.dtoToTreeData(dto);
                for (CommonModuleDto dto_commonModule : datalist_commonModule) {
                    if (dto.getMenuCode().equals(dto_commonModule.getMenuCode())){
                        td.setChecked(true);
                    }
                }
                results.add(td);
            }
            return results;
        }catch (Exception e) {
            throw new BusinessException(Consts.ERROR,"生成菜单模块树出现异常",e);
        }
    }
    /**
     * @Title: listCurrentCommonMenu
     * @Description: 常用功能
     * @param model
     * @return List<ModuleDto>    返回类型
     * @throws
     */
    public List<ModuleDto> listCurrentCommonMenu(@RequestBody(required = false) CommonModuleDto model){
        logger.info("方法---listCurrentCommonMenu--查询常用功能 传值CommonModuleDto {"+model+"}");
        UserDto user = (UserDto) sessionManager.getAttribute(Consts.USER);
        model.getPager();
        List<ModuleDto> dataList = new ArrayList<ModuleDto>();
        //查询目前的常用功能
        List<CommonModuleDto> dataList_commonMenu = getMapper().queryByList(model);
        //用户含有的菜单功能
        //UserDto user = (UserDto) sessionManager.getAttribute(Consts.USER);
        List<ModuleDto> commonModule = user.getModuleDtos();

        //将当前用户含有的功能与常用功能对比，剔除常用功能没有在当前功能内
        //为了避免用户删除一个菜单功能，但并没有在常用功能中删除（维护）
        for (ModuleDto dto_common: commonModule) {
            for (CommonModuleDto dto:dataList_commonMenu) {
                if (dto.getMenuCode().equals(dto_common.getMenuCode())){
                    dataList.add(dto_common);
                }
            }
        }
        return dataList;
    }
    /**
     * @Title: saveModuleCommon
     * @Description: 添加常用功能
     * @param commonModuleDto
     * @param menuCodes 多个menuCode  以','分开
     * @return void 返回类型
     * @throws Exception
     */
    @Override
    public void saveModuleCommon(@RequestParam("menuCodes") String menuCodes, @RequestBody CommonModuleDto commonModuleDto) {

        List<CommonModuleDto> list = new ArrayList<>();
        UserDto user = (UserDto) sessionManager.getAttribute(Consts.USER);
        //固定常用菜单项
        commonModuleDto.setUserId(user.getUserId());
        commonModuleDto.setOrgCode(user.getCurUserOrgCode());
        commonModuleDto.setFixMark(null);
        //删除库中当前机构用户的常用功能残余数据
        getMapper().deleteByCondtion(commonModuleDto);

        if (menuCodes != null && !menuCodes.equals("") ) {
            String[] modules = menuCodes.split(",");
            for (int i = 0; i < modules.length; i++) {
                CommonModuleDto dto =new CommonModuleDto();
                dto.setUserId(user.getUserId());
                dto.setOrgCode(user.getCurUserOrgCode());
                dto.setMenuCode(modules[i]);
                list.add(dto);
            }
            getMapper().batchAdd(list);
        }
    }

}
